package controle.aplicativo.negocio.aps;

import java.util.Collection;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import controle.aplicativo.excecao.MensagemException;
import controle.aplicativo.integracao.dao.EventoDAO;
import controle.aplicativo.negocio.entidade.Evento;
import controle.aplicativo.util.Constantes;
import controle.aplicativo.util.ResourceMessageFactory;
import controle.aplicativo.util.UtilResource;
import controle.arquitetura.comum.string.UtilString;
import controle.arquitetura.utilitario.ResourceMessageAnnotation;

@Service
@Transactional(readOnly = true, rollbackFor = { Exception.class })
public class ManterEventoAPS {
	
	@ResourceMessageAnnotation(propertiesFile = { Constantes.RECURSO_MENSAGENS })
	private UtilResource resource = ResourceMessageFactory.inicialize(this);
	
	@Resource
	EventoDAO eventoDAO;
	
	/**
	 * M�todo responsavel por salvar evento
	 * 
	 * @param entidade
	 * @return Mensagem
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public String salvarEvento(Evento entidade) throws Exception{
		this.validarCamposEvento(entidade);
		
		if (entidade.getIdEvento() == null) {
			this.eventoDAO.inserir(entidade);
			return this.resource.getMensagens("MSGSUCESSOEVENTO");
		} else {
			this.eventoDAO.alterar(entidade);
			return this.resource.getMensagens("MSG02");
		}
	}

	/**
	 * M�todo respons�vel por excluir participante
	 * 
	 * @param entidade
	 * @return
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public String excluirEvento(Evento entidade) throws Exception{
		
		try{
			this.eventoDAO.remover(entidade);
		}catch (Exception ex){
			throw new Exception(ex);
		}
		return this.resource.getMensagens("MSGEXCLUSAOEVENTO");
	}
	
	/**
	 * M�todo respons�vel por validar os campos obrigat�rios
	 * 
	 * @param entidade
	 * @throws Exception
	 */
	private void validarCamposEvento(Evento entidade) throws Exception {
		this.resource.clearMensagens();

		if (entidade != null) {
			if (UtilString.isVazio(entidade.getNmEvento())) {
				this.resource.addMensagens("MSG05", "nome");
			}
			if (UtilString.isVazio(entidade.getDataEvento())) {
				this.resource.addMensagens("MSG05", "data");
			}
			if (UtilString.isVazio(entidade.getInscricao())){
				this.resource.addMensagens("MSG05", "inscrição");
			}
			if (UtilString.isVazio(entidade.getDescricao())){
				this.resource.addMensagens("MSG05", "descrição");
			}
			if (UtilString.isVazio(entidade.getLocal())){
				this.resource.addMensagens("MSG05", "local");
			}
		}
		if (this.resource.isMensagens()) {
			throw new MensagemException(this.resource.getMensagens());
		}
	}
	
	
	/**
	 * M�todo responsalvel por retornar a lista de todos os participantes
	 * 
	 * @return consulta com todos os participantes
	 * @author waltenes.sardinha
	 */
	public Collection<Evento> consultarTodosEvento() {
		return this.eventoDAO.consultar();
	}
 }